/*
 * Copyright 2009 Johnson Consulting Services
 * 
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
 * use this file except in compliance with the License. You may obtain a copy of
 * the License at
 * 
 * http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 * License for the specific language governing permissions and limitations under
 * the License.
 */
package com.johnsoncs.gwt.widgets.samples.client.mock;

import java.util.List;

import com.google.gwt.core.client.GWT;
import com.google.gwt.user.client.rpc.RemoteService;
import com.google.gwt.user.client.rpc.ServiceDefTarget;
import com.johnsoncs.gwt.application.client.model.Data;
import com.johnsoncs.gwt.widgets.client.dynamictable.Row;
import com.johnsoncs.gwt.widgets.client.dynamictable.SortInfo;
import com.johnsoncs.gwt.widgets.client.dynamictable.export.ExportService;
import com.johnsoncs.gwt.widgets.client.dynamictable.export.ExportServiceAsync;

public interface MockRemoteTableModel extends RemoteService {
	public static class Util {
		private static MockRemoteTableModelAsync impl = null;

		public static ExportServiceAsync<MyRowObject> getExportService() {
			final ExportServiceAsync<MyRowObject> service = GWT.create(ExportService.class);
			final ServiceDefTarget target = (ServiceDefTarget) service;
			target.setServiceEntryPoint(((ServiceDefTarget) getService()).getServiceEntryPoint());
			return service;
		}

		public static MockRemoteTableModelAsync getService() {
			if (impl == null) {
				impl = GWT.create(MockRemoteTableModel.class);
				final ServiceDefTarget target = (ServiceDefTarget) impl;
				target.setServiceEntryPoint(GWT.getModuleBaseURL() + "MockTableModelService");
			}
			return impl;
		}
	}

	public Data getData() throws MockRemoteServiceException;

	public DbInitStatus getInitStatus();

	public Integer requestRowCount(MockFilter filter) throws MockRemoteServiceException;

	public List<Row<MyRowObject>> requestRows(int start, int count, List<SortInfo> sortInfo, MockFilter filter)
			throws MockRemoteServiceException;
}
